diff --git a/system/libraries/Session/Session_driver.php b/system/libraries/Session/Session_driver.php
index a3bc392..fb695da 100644
--- a/system/libraries/Session/Session_driver.php
+++ b/system/libraries/Session/Session_driver.php
@@ -37,57 +37,7 @@
  */
 abstract class CI_Session_driver implements SessionHandlerInterface {
 
-	// WARNING! Setting default values to properties will
-	// prevent using the configuration file values.
-
-	/**
-	 * Expiration time
-	 *
-	 * @var	int
-	 */
-	protected $_expiration;
-
-	/**
-	 * Cookie name
-	 *
-	 * @var	string
-	 */
-	protected $_cookie_name;
-
-	/**
-	 * Cookie domain
-	 *
-	 * @var	string
-	 */
-	protected $_cookie_domain;
-
-	/**
-	 * Cookie path
-	 *
-	 * @var	string
-	 */
-	protected $_cookie_path;
-
-	/**
-	 * Cookie secure flag
-	 *
-	 * @var	bool
-	 */
-	protected $_cookie_secure;
-
-	/**
-	 * Cookie HTTP-only flag
-	 *
-	 * @var	bool
-	 */
-	protected $_cookie_httponly;
-
-	/**
-	 * Match IP addresses flag
-	 *
-	 * @var	bool
-	 */
-	protected $_match_ip;
+	protected $_config;
 
 	/**
 	 * Data fingerprint
@@ -111,87 +61,9 @@
 	 * @param	array	$params	Configuration parameters
 	 * @return	void
 	 */
-	public function __construct($params)
+	public function __construct(&$params)
 	{
-		foreach ($params as $key => &$value)
-		{
-			$key = (strncmp($key, 'sess_', 5) === 0)
-				? substr($key, 4)
-				: '_'.$key;
-
-			property_exists($this, $key) && $this->$key = $value;
-		}
-
-		isset($this->_expiration) OR $this->_expiration = (int) config_item('sess_expiration');
-		isset($this->_cookie_name) OR $this->_cookie_name = config_item('sess_cookie_name');
-		isset($this->_cookie_domain) OR $this->_cookie_domain = config_item('cookie_domain');
-		isset($this->_cookie_path) OR $this->_cookie_path = config_item('cookie_path');
-		isset($this->_cookie_secure) OR $this->_cookie_secure = config_item('cookie_secure');
-		isset($this->_cookie_httponly) OR $this->_cookie_httponly = config_item('cookie_httponly');
-		isset($this->_match_ip) OR $this->_match_ip = config_item('sess_match_ip');
-
-		// Pass our configuration to php.ini, when appropriate
-		ini_set('session.name', $this->_cookie_name);
-		isset($this->_cookie_domain) && ini_set('session.cookie_domain', $this->_cookie_domain);
-		isset($this->_cookie_path) && ini_set('session.cookie_path', $this->_cookie_path);
-		isset($this->_cookie_secure) && ini_set('session.cookie_secure', $this->_cookie_secure);
-		isset($this->_cookie_httponly) && ini_set('session.cookie_httponly', $this->_cookie_httponly);
-
-		if ($this->_expiration)
-		{
-			ini_set('session.gc_maxlifetime', $this->_expiration);
-			ini_set('session.cookie_lifetime', $this->_expiration);
-		}
-		// BC workaround for setting cookie lifetime
-		elseif (config_item('sess_expire_on_close'))
-		{
-			ini_set('session.cookie_lifetime', 0);
-		}
-
-		// Security is king
-		ini_set('session.use_trans_id', 0);
-		ini_set('session.use_strict_mode', 1);
-		ini_set('session.use_cookies', 1);
-		ini_set('session.use_only_cookies', 1);
-		ini_set('session.hash_function', 1);
-		ini_set('session.hash_bits_per_character', 4);
-
-		// Work-around for PHP bug #66827 (https://bugs.php.net/bug.php?id=66827)
-		//
-		// The session ID sanitizer doesn't check for the value type and blindly does
-		// an implicit cast to string, which triggers an 'Array to string' E_NOTICE.
-		if (isset($_COOKIE[$this->_cookie_name]) && ! is_string($_COOKIE[$this->_cookie_name]))
-		{
-			unset($_COOKIE[$this->_cookie_name]);
-		}
-
-/*
-		Need to test if this is necessary for a custom driver or if it's only
-		relevant to PHP's own files handler.
-
-		https://bugs.php.net/bug.php?id=65475
-		do this after session is started:
-		if (is_php('5.5.2') && ! is_php('5.5.4'))
-		{
-			$session_id = session_id();
-			if ($_COOKIE[$this->_cookie_name] !== $session_id && file_exists(teh file))
-			{
-				unlink(<teh file>);
-			}
-
-			setcookie(
-				$this->_cookie_name,
-				$session_id,
-				$this->_expiration
-					? time() + $this->_expiration
-					: 0,
-				$this->_cookie_path,
-				$this->_cookie_domain,
-				$this->_cookie_secure,
-				$this->_cookie_httponly
-			);
-		}
-*/
+		$this->_config =& $params;
 	}
 
 	// ------------------------------------------------------------------------
@@ -199,13 +71,13 @@
 	protected function _cookie_destroy()
 	{
 		return setcookie(
-			$this->_cookie_name,
+			$this->_config['cookie_name'],
 			NULL,
 			1,
-			$this->_cookie_path,
-			$this->_cookie_domain,
-			$this->_cookie_secure,
-			$this->_cookie_httponly
+			$this->_config['cookie_path'],
+			$this->_config['cookie_domain'],
+			$this->_config['cookie_secure'],
+			TRUE
 		);
 	}
 
@@ -230,7 +102,7 @@
 			return TRUE;
 		}
 
-		if (($this->_lock = sem_get($session_id.($this->_match_ip ? '_'.$_SERVER['REMOTE_ADDR'] : ''), 1, 0644)) === FALSE)
+		if (($this->_lock = sem_get($session_id.($this->_config['match_ip'] ? '_'.$_SERVER['REMOTE_ADDR'] : ''), 1, 0644)) === FALSE)
 		{
 			return FALSE;
 		}
